Digital images captured by stand-alone digital cameras or digital cameras that are incorporated into other devices such as smart phones and tablets can be compressed using compression algorithms such as the Joint Photographic Experts Group (JPEG) compression algorithm. Digital cameras include arrays of detectors to generate signals that represent the color and intensity of light received by the detectors. The signals are converted to one or more bytes of information to represent the color and intensity of each pixel of an original digital image. Compression algorithms are then used to compress the blocks in the original digital image. For example, the JPEG compression algorithm compresses a block of pixels (such as a 16×16 minimum coded unit, MCU) from the original digital image by applying a discrete cosine transform (DCT) to generate frequency components that represent the values of the pixels in the block. The human eye is less sensitive to the higher frequency components, which can therefore be discarded or stored at a lower accuracy than the lower frequency components, thereby compressing the block. Additional lossless compression, such as Huffman encoding, is then applied to further compress the information representative of a portion of the image associated with the block. Compressing a digital image therefore requires retrieving every pixel in the image from a main memory in successive blocks.
The original digital image can also be downscaled to produce a thumbnail image that is suitable for display as an icon, e.g., to provide a visual representation of the image in a computer filing system. Downscaling reduces the number of pixels that represent the original digital image to form the thumbnail image. In order to generate a plausible representation of the original digital image, downscaling algorithms combine interpolated values of multiple pixels in the original digital image to estimate a value for each pixel in the thumbnail image. Examples of interpolation algorithms include nearest-neighbor interpolation, bilinear interpolation, bicubic interpolation, and the like. Downscaling is typically performed by fetching lines of pixels from the original digital image stored in the main memory and storing each line in a local image buffer. The interpolation algorithm is then used to calculate the contribution of each pixel in the buffered line to a corresponding pixel in the thumbnail image. Thus, generating a thumbnail image requires retrieving every pixel in the image from the main memory in successive lines.